/***********************************************************************************
 * 文件名： rhc_config.h
 * 版本： 1
 * 说明：
 * 		RHC(Resistance heating controller 电阻加热控制器)的配置文件。请确保文件名如上。
 *      目前只支持平均电压。
 *      目前只支持使用电池电压为ADC正极参考电压，采集内部固定参考电压的ADC采集方式。
 * 修改记录：
 * 	2021/04/21: 初版。 刘言。
***********************************************************************************/
#ifndef _RHC_CONFIG_H_
#define _RHC_CONFIG_H_

// 仅包含需要的头文件，polsys驱动和组件接口不用再包含头文件
#include "..\bsp\hard_wire.h"



// 目标补偿值，SetTarget 时会加这个值，如果为电压，单位为mV
// 用于当输出不准时进行微调
#define _RHC_TARGET_CPST    0

// AD采集模式【未实现，必须为0】
// 0：反推模式，使用电池电压作为AD模块正极参考电压，采集一个固定参考电压来反推电池电压
// 1: 正推模式，使用一个固定电压作为AD模块的参考电压，采集分压后的电池电压，必须设置分压比。
#define _RHC_AD_MODE        0
#if (_RHC_AD_MODE == 0)
// 内部固定参考电压值，注意不是ADC硬件的参考电压，是可被ADC采集的参考电压
// RHC要求ADC硬件正极参考电压固定为电池电压。
#define _RHC_VREF_VOLTAGE   1200
// 内部固定参考电压采集通道
#define _RHC_ADCH_VREF      ADCH_VREF
#else
// ADC模块正极参考电压
#define _RHC_ADC_VREF       2500
// 电池电压分压电阻的分压比，正极电阻所占的比例
#define _RHC_HIGH_RES       1
// 电池电压分压电阻的分压比，负极电阻所占的比例
#define _RHC_LOW_RES        1
#endif

// 输出端口AD通道
#define _RHC_ADCH_OVAL      ADCH_OVAL


// ADC满值
// 目前只测试了255
#define _RHC_FULL_ADV       255

// 开启连续转换
// 1：开启，只要 _RHC_OutIsON 是真，就会不停的进行AD转换，有利于提高过流保护灵敏度
// 0：关闭，只在PWM周期开始时转换一次。
// PWM频率很低时建议开启，PWM频率4kHz以上建议关闭，具体还要依据AD转换速率来决定。
#define _RHC_KEEP_ADC       1

// 设置过流AD值
// 过流检测原理：以电池电压为ADC参考电压，当电流越大，输出电压将越低于电池电压。无论采集方式是什么。
// 当输出端口上的AD值处于以下范围认为过流。一般情况下 _RHC_OC_ADVL = 0，某些特殊硬件可能要求不为0。
#define _RHC_OC_ADVH        238     // 范围上限
#define _RHC_OC_ADVL        10      // 范围下限

// 允许检测到过流的次数
// 当不为0时，多次检测到过流才会保护
// 需要注意，如果没有开启连续转换，多次检测到过流的时间可能较长，过长的时间会烧坏MOS。
#define _RHC_OC_ALLOW_CNT   1

// 输出时的电池电压下限(mV)
// 电池电压低于这个值将会停止输出并触发 RHC_EV_NO_BATTERY 事件，注意是带载时的电压。
#define _RHC_VBAT_LIMIT     2800

// 启用负载检测功能，注释掉关闭可以节省代码量
// 目前支持检测是否空载，检测原理同过流检测，当电流足够小时，输出电压接近电池电压。
//#define _RHC_USE_LOAD_CHECK
    // 设置空载AD值，以电池电压为ADC参考电压，当输出端口AD值大于等于这个值时认为空载。
    #define _RHC_NO_LOAD_ADV        254
    // 允许检测到空载的次数，连续多次检测到空载才调用事件通知。
    #define _RHC_NO_LOAD_ALLOW_CNT  8

// 空载补偿 与负载检测功能互斥 需要用到空载AD值 在负载检测设置里面
#define _RHC_USE_NOLOAD_MAKE
    // 补偿电压(mV)
    #define _RHC_NOLOAD_MAKE_VALUE  -100

// 互斥判断
#if defined _RHC_USE_LOAD_CHECK && defined _RHC_USE_NOLOAD_MAKE
    #error "负载检测与空载补偿互斥"
#endif

// 设置一些需要引用的外部函数(驱动和组件接口不用再包含头文件)

// 异步开始一次AD转换，确保转换完成后 RHC_EvADCCompleted 会被调用
#define _RHC_StartADC(u8_ch)    Adc_Start(u8_ch)


// 获取此时输出（PWM电平）状态
// 如果没有合适的获取途径，可以设置成 1 ，这样只要在工作就认为PWM是高电平
// 注意：如果设置成了 1 且开启持续转换，建议 _RHC_OC_ALLOW_CNT 和 _RHC_OC_ADVL 不为 0 ，避免采集到PWM跳变沿或者无效时间段误判过流。
#define _RHC_OutIsON()          Board_mOutIsEn

// 初始化PWM控制器
#define _RHC_InitPWM()          //HPwm_Init()  // 已被app.c统一初始化

// 输出刹车（立即停止），停止输出时被调用。
#define _RHC_Brake()            {SPwm_Brake1(); OVAL_DIGIT_MODE;}

// 设置 8bit PWM值
#define _RHC_SetPWM(u8_pwm)     SPwm_SetValue(1, (u8_pwm)>>1)

// 启动PWM输出，在 RHC_Start 时被调用
// 需要确保第1个及后续PWM周期输出开启时能触发事件 RHC_EvPWMOutON，来确保过流保护生效
#define _RHC_StartPWM()         {OVAL_ANALOG_MODE;SPwm_Enable();}


// // 获取此时输出（PWM电平）状态
// // 如果没有合适的获取途径，可以设置成 1 ，这样只要在工作就认为PWM是高电平
// // 注意：如果设置成了 1 且开启持续转换，建议 _RHC_OC_ALLOW_CNT 和 _RHC_OC_ADVL 不为 0 ，避免采集到PWM跳变沿或者无效时间段误判过流。
// #define _RHC_OutIsON()          OUTEN_IS_ON

// // 初始化PWM控制器
// #define _RHC_InitPWM()          //SPwm_Init() // 注意RGB灯同时也用了SPWM组件

// // 输出刹车（立即停止），停止输出时被调用。
// #define _RHC_Brake()            SPwm_Brake(3)

// // 设置 8bit PWM值
// #define _RHC_SetPWM(u8_pwm)     SPwm_SetValue(3,u8_pwm)

// // 启动PWM输出
// // 需要确保第1个及后续PWM周期输出开启时能触发事件 RHC_EvPWMOutON，来确保过流保护生效
// #define _RHC_StartPWM()         SPwm_ClrCount()



#endif
